﻿using System.Collections.Generic;
using System.Reflection;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using ClickLand.CorporacionPlaza.LogicaNegocio.Contratos;
using ClickLand.CorporacionPlaza.LogicaNegocio.Implementacion.ComandosProyeccion;
using Logger;

namespace ClickLand.CorporacionPlaza.LogicaNegocio.Fabricas
{
    /// <summary> Clase que hace de fabrica para los comandos que involucran la entidad Proyeccion </summary>
    public class FabricaComandosProyeccion
    {
        /// <summary> Comando que obtiene un comando que elimina una proyeccion </summary>
        /// <param name="proyeccion">Datos a eliminar</param>
        /// <returns>Comando que elimina una proyeccion</returns>
        public static IComando<bool> ObtenerComandoEliminar(Proyeccion proyeccion)
        {

            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Eliminar(proyeccion);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene una instacia de un comando que agrega los datos de una proyeccion </summary>
        /// <param name="proyeccion">datos a insertar</param>
        /// <returns></returns>
        public static IComando<bool> Agregar(Proyeccion proyeccion)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Agregar(proyeccion);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }

        /// <summary> Metodo que obtiene una instancia de un comando que consulta las proyecciones de un comando </summary>
        /// <param name="contrato">Datos para la consulta</param>
        /// <returns>Comando que consulta la lista de proyeccion de un contrato</returns>
        public static IComando<IList<Proyeccion>> Consultar(Contrato contrato)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new Consultar(contrato);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }
    }
}
